To speed up processing, concurrent applications may execute several streams of operations at the same time using multiple threads. For example, each stream of operation may execute as it would in a sequence but may also potentially interact with other streams that are executing at the same time. Because these streams may interact with each other during execution, multi-threaded applications may perform operations in an unpredictable manner. Furthermore, multi-threaded applications may include a large number of execution paths.